

package cn.shengchao.examstart.user.acl.ports.repositories;

import cn.shengchao.examstart.user.acl.adapters.message.MemberStudent;
import cn.shengchao.examstart.user.domain.entity.PlatformUser;
import cn.shengchao.examstart.user.domain.entity.User;
import cn.shengchao.examstart.user.domain.entity.UserPreference;
import cn.shengchao.examstart.user.domain.entity.UserRealPerson;
import cn.shengchao.examstart.user.ohs.local.messages.SaveUserPreference;

import java.util.List;
import java.util.Optional;

/**
 * 用户仓储
 */
public interface IUserRepository {

    /**
     * 根据社交平台获取用户信息
     *
     * @param appid
     * @param openId
     * @param unionId
     * @return
     */
    Optional<User> getUserBySocial(String appid, String openId, String unionId);

    /**
     * 保存用户信息
     *
     * @param user
     */
    User saveWxUser(User user);

    /**
     * 保存后台添加平台用户信息
     *
     * @param user
     */
    PlatformUser savePlatformUser(PlatformUser user);

    /**
     * 获取用户信息
     */
    User ofUnionId(String id);
    /**
     * 获取用户信息
     */
    User of(Long id);

    /**
     * 获取用户偏好
     */
    UserPreference getUserPreference(Long id);

    /**
     * 更新用户偏好
     */
    void saveUserPreference(SaveUserPreference userPreferences, Long id);

    UserRealPerson getRealPerson(Long uid);

    void saveRealPerson(UserRealPerson realPerson);

    List<User> selectByPhone(String phone);

    /**
     * 根据id列表获取用户列表
     *
     * @param list id列表
     * @return 用户
     */
    List<User> getUserList(List<Long> list);

    void updateUserDept(Long userId, Long deptId);

    List<MemberStudent> selectMemberStudent(Long userId, String searchValue);
}
